#include <iostream>
#include <unistd.h>
#include <cstring>
#include <pthread.h>
int gval = 1;

// 子线程：
void *excuteThread(void *atr)
{
    int cnt = 0;
    while (true)
    {
        std::cout << (char *)atr << " pid->" << getpid() << " cnt->" << cnt
                  << " gval->" << gval << std::endl;
        cnt++;
        sleep(1);

        // 让第二个线程，在10s后崩溃：可以验证只要一个线程崩溃，就会导致整个进程崩溃！
        if ((!strcmp("thread_two", (char *)atr)) && (cnt == 10))
        {
            std::cout << "线程" << (char *)atr << "崩溃了" << std::endl;
            int *p = nullptr;
            *p = 10;
        }
    }
}

int main()
{
    // 创建线程：
    pthread_t tid1;
    pthread_create(&tid1, nullptr, excuteThread, (void *)"thread_one");

    pthread_t tid2;
    pthread_create(&tid2, nullptr, excuteThread, (void *)"thread_two");

    // 主线程：
    while (true)
    {
        sleep(1);
        std::cout << "main thread pid->" << getpid() << " gval->" << gval << std::endl
                  << std::endl;
        //可以验证：对于全局变量，一个线程修改了，其他的线程也会受到影响，即全局变量是共享的
        gval *= 2;
    }
    return 0;
}